package com.ssd.service;

import com.ssd.entity.Gift;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ssd.entity.PointsRecordTotal;
import com.ssd.entity.dto.request.GiftQueryForPageReqDTO;
import com.ssd.entity.dto.request.GiftSaveReqDTO;
import com.ssd.entity.dto.request.GiftSeizeReqDTO;
import com.ssd.entity.dto.request.GiftUpdateReqDTO;
import com.ssd.entity.dto.response.GiftPageInfoResDTO;
import com.ssd.viewmodel.Pager;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 礼品表 服务类
 * </p>
 *
 * @author author
 * @since 2024-11-21
 */
public interface IGiftService extends IService<Gift> {

    /**
     * 保存礼品信息
     * @param giftSaveReqDTO 保存礼品请求模型
     */
    void save(GiftSaveReqDTO giftSaveReqDTO);

    /**
     * 修改礼品信息
     * @param giftUpdateReqDTO 修改礼品请求模型
     */
    void update(GiftUpdateReqDTO giftUpdateReqDTO);

    /**
     * 分页查询礼品信息
     * @param giftQueryForPageReqDTO 查询条件
     * @return
     */
    Pager<GiftPageInfoResDTO> queryGiftForPage(GiftQueryForPageReqDTO giftQueryForPageReqDTO);

    /**
     * 查询用户端礼品列表
     * @param lastId 上一次查询最后记录id
     * @return
     */
    List<GiftPageInfoResDTO> queryGiftConsumerForPage(Long lastId);

    /**
     * 兑换礼品
     *
     * @param giftSeizeReqDTO 礼品id
     */
    void seizeGift(GiftSeizeReqDTO giftSeizeReqDTO) throws IOException;


    /**
     * 分布式锁扣减积分
     * @param gift 礼品对象
     * @param recordTotal 用户积分记录对象
     * @param addressId 地址id
     * @param userId 用户id
     */
    void redissonGift(Gift gift, PointsRecordTotal recordTotal,Long addressId,Long userId);
}
